package cn.tedu.charging.user.service.impl;

import cn.tedu.charging.commom.utils.JsonUtils;
import cn.tedu.charging.user.dao.repository.UserRepository;
import cn.tedu.charging.user.pojo.po.UserPO;
import cn.tedu.charging.user.pojo.vo.WxLoginData;
import cn.tedu.charging.user.service.WXLoginService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
@Slf4j
public class WXLoginServiceImpl implements WXLoginService {

    /**
     * appId 替换成你的appId ,应该放到配置文件里
     */
    String appId = "wx64ed7ab9141c1743";

    /**
     * 小程序密钥 替换成你的AppSecret  应该放到配置文件里
     */
    String appSecret = "cdebe4ec25a6da166f0933bf1cbbdf65";


    @Autowired
    private UserRepository userRepository;


    /**
     *
     * 微信用户的唯一标识 openId
     * 和 我们数据库的的 用户id 做了映射 绑定 25
     * @param code
     * @param nickName
     * @return
     */
    @Override
    public Integer login(String code, String nickName) {
        //调用微信服务 获取用户的openId
        String openId = getOpenId(code);
        //通过openId获取用户信息
        UserPO userPO = userRepository.getUserByOpenId(openId);
        if (userPO == null) {
            //为空,表示这个用户第一次登录,注册用户信息,
            // 把微信用户信息保存到充电服务的用户服务,返回用户id
            return userRepository.save(openId,nickName);
        }else {
            //已经注册过,直接返回用户id
            return userPO.getId();
        }
    }
    /**
     * 通过code 调用微信服务获取 唯一的 openId
     * @param code
     * @return
     */
    private String getOpenId(String code) {
        //通过微信的接口地址和appidAppID(小程序ID)和 appSecret AppSecret(小程序密钥)
        String url = "https://api.weixin.qq.com/sns/jscode2session?" +
                "appid=" + appId +
                "&secret=" + appSecret +
                "&js_code=" + code +
                "&grant_type=authorization_code";
        //利用spring原生http请求工具对接口进行请求
        RestTemplate restTemplate = new RestTemplate();
        String jsonData = restTemplate.getForObject(url, String.class);
        log.debug("调用微信地址获取用户信息:{}",jsonData);
        WxLoginData wxLoginData = JsonUtils.fromJson(jsonData, WxLoginData.class);
        //返回结果
        //{"session_key":"eyYhTlvXQ6L+uTgwRuk6hA==",
        // "openid":"o8qfb6Kor2EIEg-7h4nkquviUMQA"}
        //openid 就是微信来确定唯一用户的
        if (wxLoginData != null) {
            return wxLoginData.getOpenid();
        }
        return "";
    }
}
